读取用药与服药事件(Medications) PRO
Scripting 提供对「健康」App 中用户跟踪的**用药(Medications)及其记录的服药事件(dose event)**的只读访问,通过 Health.queryMedications() 与 Health.queryMedicationDoseEvents() 实现。
需要 iOS 26.0 或更高版本。在更早的系统上,这两个函数都会以错误 reject。
本指南介绍如何列出用户的用药,以及如何读取用户记录的服药情况。
用药与服药事件
- 用药(
HealthUserAnnotatedMedication)是用户在「健康」App 中跟踪的药物,包含nickname(昵称)、isArchived(是否归档)、hasSchedule(是否设置了提醒计划)以及medication(药物概念)。 - 药物概念(
HealthMedicationConcept)描述药物本身:稳定的identifier、displayText(名称)、generalForm(剂型,如"tablet"、"injection")以及relatedCodings(如 RxNorm 编码)。 - 服药事件(
HealthMedicationDoseEvent)是一次记录的服药 —— 已服用、跳过、暂停或未交互。它通过medicationConceptIdentifier回链到某个用药。
权限
用药数据使用按对象授权(per-object authorization):首次调用 Health.queryMedications() 时,系统会让用户选择允许脚本访问哪些用药。Scripting 会自动发起该授权 —— 你无需自行请求授权。
API 概览
示例:列出在用的用药
示例:读取今天的服药事件
示例:某个用药的服药记录
用某个用药的 identifier 只取它的服药事件:
说明
Health.queryMedications()返回HealthUserAnnotatedMedication实例;Health.queryMedicationDoseEvents()返回HealthMedicationDoseEvent实例。scheduledDate与scheduledDoseQuantity仅在按计划的服药事件(scheduleType === "schedule")中存在;按需服药时为null。- 服药事件的
medicationConceptIdentifier与用药概念的identifier一致,可据此按用药分组服药记录。 - 这两个 API 均为只读 —— 用药与服药事件由「健康」App 管理,无法从脚本创建。
小结
- 用
Health.queryMedications()列出用户跟踪的用药。 - 用
Health.queryMedicationDoseEvents()读取记录的服药,可按日期、状态、计划时间窗口或用药过滤。 - 用
HealthMedicationConcept.identifier/HealthMedicationDoseEvent.medicationConceptIdentifier关联二者。
